perm filename PFAILD.FAI[MSS,LCS]4 blob
sn#249502 filedate 1976-11-24 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE PFAIL ********* OCT 16,75 *********
C00038 ENDMK
C⊗;
TITLE PFAIL; ********* OCT 16,75 *********
INTERNAL LOOK,LOOKD,LOOKF,BLTEM
ENTRY GETPTS,MOVIT,EXTEN,QRN,DBAR,SORT,SHIFT,SHFT1,CODEN
ENTRY ADRST,SHFT0,PSHFT,ENDL,STAFF,RIGHT,LOOP1,RESTS,MMNN
ENTRY EXCHG,SHRNK,EXPND,CLFNUM,SLRV,IFIX,FLOAT,EXCH,CLEFN
EXTERNAL .COMM.,XRN,KJY,PTR,POSI,AMOD,KNR,NNP,PX,XXX,Q,SF,LLL
EXTERNAL RCLF,STF,PTMOVE,IPG,JN,RCLF
DEFINE ERROR (MSG)
< JSA 16,.ERROR
JUMP [ASCIZ/MSG/
]
>
.ERROR: 0
OUTSTR [ASCIZ/?
/] ;MAKE SURE HE CAN SEE HIS ERROR
OUTSTR @(16) ;OUTPUT ERROR MESSAGE
CALLI 1,12 ;LET USER CONTI2UE
JRA 16,1(16)
CH←13
REGS: BLOCK 20
;LOOK(<FILE>) FOR NO EXT., LOOKD() FOR .DAT, LOOKF() FOR .DMD
LOOKF: 0
MOVSI 0,'DMD'
JRST LOOK1
LOOKD: 0
MOVSI 0,'DAT'
JRST LOOK1
LOOK: 0
MOVEI 0,0
LOOK1: MOVEM 0,DIR+1
MOVE 0,@(16)
MOVEM 0,FILNAM
JSA 16, INTFIQ
SETZM DIR+2
SETZM DIR+3
LOOKUP CH,DIR
TDZA 0,0
MOVNI 0,1
JRA 16,1(16)
INTFIQ: 0 ;INITS DSK FOR INPUT
MOVEI REGS
BLT REGS+3
INIT CH,17
SIXBIT/DSK/
0
HALT .-3
; ERROR <CAN'T INIT DSK!>
INTF4: MOVE 0,FILNAM#
MOVEM 0,FN#
MOVE 1,[POINT 7,FN]
INTF3: MOVE 2,[POINT 6,DIR]
SETZM DIR
MOVEI 3,5
INTF1: ILDB 0,1
CAIN 0," "
JRST INTF2
SUBI 0,40
IDPB 0,2
SOJG 3,INTF1
INTF2: HRLZI REGS
BLT 3
JRA 16,0(16)
DIR: BLOCK 4
BLTEM: 0
HRLI 1,PX ;KWDS(...)=KPN(...) PX IS LOC. OF KPN ARRAY
HRRI 1,PTR ;RIGHT HALF AS LOC OF KWDS ARRAY
MOVE 2,RCLF+3 ;GET NUM. OF ITEMS (RCLF+3=ITEM)
BLT 1,PTR(2) ; PTR(2) IS WD CNT. (ITEM+1)
HRLI 1,Q ;RN(...)=Q(...)
HRRI 1,XRN
MOVE 2,POSI+=9 ;THIS IS JPQ, NUM OF WDS.
BLT 1,XRN-1(2)
JRA 16,0(16)
IFIX: 0
KIFIX 0,@(16)
JRA 16,1(16)
FLOAT: 0
FLTR 0,@(16)
JRA 16,1(16)
K←15↔J←14↔ M←2↔ R2←5↔ X←6↔ L←4↔ R←7↔ A←11↔RY←3↔RZ←13↔JJ2←12
; SUBROUTINE GETPTS
; COMMON/KNR/N(500) /NNP/NP(500)
;XXX COMMON/XRN/RN(4000) /KJY/ K,J
; COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS
;XXX 1/PTR/PWDS(250),ITEM,LL,I,IX
; EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R11,RJQ(9))
; 1,(R6,RJQ(4))
GETPTS: 0 ;CALL GETPTS(N,RN,PWDS)
SETZ J, ; J=0
SETZ K, ; K=0
MOVE JJ2,POSI+=8
MOVE R2,.COMM.
SETZ X,
;; MOVE X,@(16)
;; SOJ X
MOVEI M,@2(16); DO 1 M=1,ITEM
; ADDI M,(X)
G1: AOJ X,
MOVE L,(M)
MOVEI R,@1(16) ;L=PWDS(M)
ADDI R,(L) ;IF(RTLINE(L))GO TO 1
;* MOVE 1,1(R) ;RN(L+2)
;;NEVER USED IN 'PARTS'- CAML R2,[=5.0]
;; JRST GZ
MOVE A,1(R)
;; SKIPE IPG ;IF(IPG)GO TO GSTF
;; JRST GSTF
;; KIFIX A,A
;; FLTR A,A ;STAFF=IFIX(STAFF) DROPS DECIS.
SKIPL IPG
JRST G9
GSTF: CAME R2,A ;FINDS STAFF #
JRST GX
;;GZ: MOVE A,.COMM.+7 ;RY=RN(L+1)
;; JUMPLE A,G9 ;F(R6.LE.0)GO TO 9
;; CAME A,(R) ;IF(R6.NE.RY)GO TO 1
;; JRST GX
; CHECK CODE NUM
G9: MOVE A,2(R)
CAMLE A,.COMM.+6 ;R5
JRST G2 ;9 IF(OUTLIM(R4,R5,RN(L+3)))GO TO 2
CAMGE A,.COMM.+5 ;R4
JRST G2
SKIPG JJ2
MOVE JJ2,X
MOVE .COMM.+=8 ;IF(IPG)RN(L+2)=R7
SKIPGE IPG
MOVEM 1(R)
AOJ J,
; IN LIMITS?
; MOVEI A,XRN+=2498 ;J=J+1
;; MOVEI A,KNR-1
;; ADDI A,(J)
MOVEI 0,(L)
AOJ K, ;K=K+1
;; MOVEI 1,NNP-1
;; ADDI 1,(K) ;NP(K)=L
MOVEM 0,NNP-1(K)
ADDI 0,3 ;N(J)=L+3
MOVEM 0,KNR-1(J)
; NP IS FOR USE IN JUSTIFY ROUTINE
G2: KIFIX RY,(R) ;2 IF(RY.LT.4)GO TO 1
CAIGE RY,4
JRST GX
CAIN RY,=44 ;CODE 4 IS SOMETIMES =44
JRST G5 ;FOUND A LINE
CAILE RY,7
JRST GX ;IF(RY.GT.7)GO TO 1
; TWO-ENDED ITEM?
MOVE RZ,-1(R) ;RZ=RN(L)
; WD CNT
;; CAMN RY,[=4.0] ;GO TO(4,5,6,7),IFIX(RY)-3
;; JRST G4
;; CAMN RY,[=5.0]
;; JRST G5
;; CAMN RY,[=6.0]
;; JRST G6
;; CAMG RZ,[=4.0] ;4 IF(RZ.GT.2)GO TO 5
;; JRST G5 ; THERE IS A TRILL WIGGLE
;; JRST GX ;GO TO 1 -- NO WIGGLE (P7≠0)
XCT TBL-4(RY) ; NEXT REPLACES THE ABOVE.
JRST G5
JRST GX
TBL: JRST G4
JRST G5
JRST G6
CAMG RZ,[4.0]
G4: CAMG RZ,[=2.0] ;7 IF(RZ.GT.3)GO TO 5
JRST GX
JRST G5 ;GO TO 1
G6: CAMGE RZ,[=8.0] ;6 IF(RZ.LT.8)GO TO 8
JRST G8
SKIPL 6(R) ;IF(R7)GO TO 8
SKIPN =9(R) ;IF(R10.EQ.0)GO TO 8
JRST G8
MOVE A,7(R) ; IF(OUTLIM(R4,R5,RN(L+8)))GO TO 8
JUMPE A,G5 ;IF(R8.EQ.0)GO TO G5(MOVE ONLY P3,6)
CAMLE A,.COMM.+6
JRST G8
CAMGE A,.COMM.+5
JRST G8
CAMLE JJ2,X
MOVE JJ2,X
AOJ J,
; IN LIMITS?
MOVEI 0,=8(L) ;J=J+1
MOVEM 0,KNR-1(J)
G8: CAMGE RZ,[=7.0] ;8 IF(RZ.LT.7)GO TO 5
JRST G5
SKIPN A,8(R) ; R9
JRST G5
SKIPL 6(R) ; R7
SKIPN 7(R) ; R8
JRST G5
CAMLE A,.COMM.+6
JRST G5
CAMGE A,.COMM.+5 ;R4
JRST G5
CAMLE JJ2,X
MOVE JJ2,X
AOJ J, ;J=J+1
; IN LIMITS?
MOVEI 0,=9(L)
MOVEM 0,KNR-1(J) ;N(J)=L+9
G5: MOVE A,5(R)
CAMLE A,.COMM.+6
JRST GX
CAMGE A,.COMM.+5 ;R4
JRST GX
CAMLE JJ2,X
MOVE JJ2,X
AOJ J,
; IN LIMITS?
;| MOVEI A,XRN+=2498 ;J=J+1
;; ADDI A,(J)
MOVEI 0,6(L) ;5 IF(OUTLIM(R4,R5,RN(L+6)))GO TO 1
;; ADDI 0,6 ;N(J)=L+6
MOVEM 0,KNR-1(J)
;;GX: CAMGE X,PTR+=250 ;1 CONTINUE
GX: CAMGE X,LLL ;1 CONTINUE
AOJA M,G1
MOVEM JJ2,POSI+=8
MOVEM J,KJY+1
MOVEM K,KJY
JRA 16,3(16)
; SUBROUTINE MOVIT(RN)
; COMMON /KNR/ N(500)
; COMMON /KJY/ DONT,J
; COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS
; EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R9,RJQ(7))
; 1,(R6,RJQ(4)),(N,RN(2500)),(R8,RJQ(6))
MOVIT: 0 ;RDIS=(R9-R8)/(R5-R4)
MOVE R,.COMM.+=10
FSBR R,.COMM.+=9
MOVE RY,.COMM.+6
FSBR RY,.COMM.+5
FDVR R,RY
; MOVEI L,XRN+=2499 ; DO 1 K=1,J
MOVEI L,KNR
SETZ K,
MOVE 0,.COMM.+=10 ; SET UP R9
;;M1: MOVE X,L ; L=N(K)
;; MOVE A,(X)
M1: MOVE A,(L)
MOVEI R2,@(16) ;RA=RN(L)
ADDI R2,(A)
MOVEI RZ,(R2)
MOVE R2,-1(R2)
CAMGE R2,.COMM.+5 ;IF(OUTLIM(R4,R5,RA))GO TO 1
JRST MX
CAMLE R2,.COMM.+6
JRST MX
JUMPE 0,M2 ;IF(R9.NE.0)RA=(RA-R4)*RDIS
FSBR R2,.COMM.+5
FMPR R2,R
M2: FADR R2,.COMM.+=9 ; RN(L)=R8+RA
MOVEM R2,-1(RZ)
MX: AOJ K, ;1 CONTINUE
CAMGE K,KJY+1
AOJA L,M1
JRA 16,1(16)
EXTEN: 0 ;FUNCTION EXTEN(X)
HRRM 16,.+2
JSA 16,AMOD ;EXTEN=AMOD(X,1.)*10.
JUMP @0
JUMP [=1.0]
FMPR [=10.0]
JRA 16,1(16)
DBAR: 0 ; CALL DBAR(K,ITEM,J)
MOVE 4,@2(16) ; -J-RR=RN(J+3)
SKIPL IPG ;IF(IPG.GE.0)LEAVE BAR ALONE!
JRST DB1
KIFIX 2,XRN+3(4) ; -RN(J+4)-
;KZ=RN(J+4)/100.
IDIVI 2,=100
IMULI 2,=100 ;RN(J+4)=1.+KZ*100.
AOJ 2,
FLTR 2,2
MOVEM 2,XRN+3(4)
DB1: MOVE 1,@1(16)
;;??? SOJ 1, ; ITEM-1
MOVE 7,XRN+2(4) ; -RR-
MOVE 4,@(16) ; DO 82 KY=K+1,ITEM
DB: MOVE 5,PTR(4) ;KZ=PWDS(KY)
MOVE 6,XRN(5) ; IF(RN(KZ+1).NE.4)GO TO 82
CAME 6,[4.0]
JRST DB82
MOVE 6,XRN-1(5) ;IF(RN(KZ).NE.2)GO TO 82
CAME 6,[2.0]
JRST DB82
;;C AVOIDS DUPLICATE BARS.
MOVN 6,XRN+2(5) ;IF(ABS(RR-RN(KZ+3)).GT..5)GO TO 82
FADR 6,7
SKIPGE 6
MOVNS 6
CAMLE 6,[0.5]
JRST DB82
MOVE 6,[99.0] ;RN(KZ+2)=99
MOVEM 6,XRN+1(5)
SETZM XRN(5) ;RN(KZ+1)=0
DB82: AOJ 4, ;82 CONTINUE
CAIGE 4,(1)
JRST DB
MOVEM 7,SHFT1 ; RR SAVES IT FOR ADRST ROUTINE
JRA 16,3(16)
QRN: 0 ; CALL QRN(J,XWDS,K)
MOVE 4,@(16) ;810 JA=PWDS(K+1)
SKIPE IPG ;IF(IPG)RN(J+2)=0 DON'T ZERO IT WITH 'PAGES'
SETZM XRN+1(4)
;; MOVE 3,XRN(4) ;GET CODE NUM.
;; CAMN 3,[1.0]
;; JRST PN5
;; SETOM NORHY# ;IF ITEM IS NOT NOTE, SET FLAG=-1
;; JRST PN4
;;PN5: JFCL ;CHECK AGAINST PREVIOUS NOTE*****************
PN4: MOVE 5,@2(16) ; DO 7 KY=J,JA-1
MOVE 5,PTR(5) ; - JA -
MOVE 6,XXX ; PN(LK)=RN(KY)
MOVEI 1,(6) ; SAVE IT FOR A LITTLE LATER
PN: MOVE 7,XRN-1(4) ;7 LK=LK+1
MOVEM 7,Q-1(6)
AOJ 4, ;AC4 IS KY, AC6 IS LK
CAME 4,5
AOJA 6,PN
SKIPN SF ;IF(KL.EQ.0)GO TO PN5
JRST PN5
SETZM Q-1(6) ;ZERO OUT 3 LOCATIONS AHEAD
SETZM Q(6)
SETZM Q+1(6)
SETZM Q+2(6)
MOVE [1.0] ;PUT A 1.0 AS RHYTHM FOR REST OR NOTE
ADD 6,SF
MOVEM Q-1(6) ;PUT IT IN PARAM 7 OR 9
PN5: AOJ 6,
MOVE 2,.COMM.+6 ; IF(R5)GO TO 6666
JUMPL 2,PN2 ; IF(PN(J).EQ.2)LK=LK+1
MOVEM 2,Q+4(1) ; PN(J+5)=R5
MOVE 3,[3.0]
PN3: MOVE 4,3 ; IS THE WDCNT BIG ENOUGH?
FSBR 4,Q-1(1)
KIFIX 4,4
ADD 6,4 ; UPDATE THE MAIN COUNTER
SETZM Q+3(1) ; ZERO PARAM 4, THE VERTICAL POS. PN(J+4)
MOVEM 3,Q-1(1) ; PN(J)=3 OR 4
JRST PN1
PN2: MOVE 3,RCLF ; IF(R.NE.17)GO TO
CAME 3,[17.0]
JRST PN1
MOVE 3,[4.0] ; THE WDCNT
MOVE 2,RCLF+1 ; CLEF #
MOVEM 2,Q+5(1) ;PN(J+6)=CLEF
JRST PN3
PN1: MOVEM 6,XXX ;LK=LK+1 (6666↑)
MOVE 4,LLL ; -L- XWDS(L)=LK
ADD 4,1(16) ; ADDR. XWDS ARRAY
MOVEM 6,(4)
AOS LLL ;L=L+1
JRA 16,3(16)
SORT: 0 ; CALL SORT(XWDS)
MOVE 11,LLL ; L
SOJ 11,
MOVEI 4,1 ;I=1
MOVE 0,[16.0]
MOVE 1,[8.0]
SETZ 5, ; -K- DO 243 K=1,L-1
S2: MOVE 7,(16) ; ADDR. OF XWDS
ADDI 7,(5) ;LB=XWDS(K)+1
MOVE 6,(7)
;; MOVE 10,Q(6) ;IF(PN(LB).NE.16)GO TO 243
;; CAME 10,[16.0]
CAME 0,Q(6)
JRST S243
;; MOVE 10,Q-1(6) ;IF(PN(LB-1).LT.8)GO TO 243
;; CAMGE 10,[8.0]
CAMLE 1,Q-1(6)
JRST S243
MOVE 10,-1(7) ;JL=XWDS(K-1)
MOVE 10,Q+2(10)
MOVEM 10,Q+2(6) ;244 PN(LB+2)=PN(JL+3)
S243: AOJ 5,
CAME 5,11 ; -L-1
JRST S2 ; 243 CONTINUE
;; PUTS CONTINUATION OF TEXT IMMEDIATELY AFTER PREV. POS.
;; FOR SPACING PROBLEMS BELOW.
MOVEI 11,1 ;M=2
SETZ 12, ;J=1
S24: MOVE 13,[100000.0] ;24 RA=100000.
;; POSITION
MOVE 1,LLL ; L
SOJ 1,
SETZ 14, ; -K-
S21: MOVE 2,(16) ;DO 21 K=1,L-1 - ADDR. OF XWDS -
ADDI 2,(14) ;JL=XWDS(K)+3
MOVE 2,(2)
;; FIXX(2) ; -JL- (NO +3)
MOVE 3,Q+2(2) ;R=PN(JL)
CAMN 3,[100000.0]
JRST SX21 ;IF(R.EQ.100000)GO TO 21
MOVE 3 ;241 IF(ABS(R-RA).GT..1)GO TO 240
FSBR 13
SKIPGE
MOVNS
CAMLE 0,[0.1]
JRST S240
MOVEM 13,Q+2(2) ; ((R=RA)) PN(JL)=R
;; PUT IN HERE MULTI-VOICE TRAP SOMEDAY
JRST SX21 ;GO TO 21
S240: CAMLE 3,13 ;240 IF(R.GT.RA)GO TO 21
JRST SX21
;; LINES THEM UP
MOVEI 4,(2) ; SAVES JL (I=K)
MOVE 13,3 ; RA=R ;21 CONTINUE
SX21: AOJ 14, ; -K-
CAME 14,1
JRST S21
CAMN 13,[100000.0] ;IF(RA.EQ.100000)GO TO 23
JRA 16,1(16); JUMP IF ALL SORTED
;;;; MOVE 10,(16) ;242 JL=XWDS(I)
;;;; ADDI 10,(4)
;;;; MOVE 10,(10) ; AC4 IS I-1
;;;; FIXX(10) ; -JL-
MOVEI 15,(4) ;LA=JL
KIFIX 1,Q-1(4) ;N=PN(JL)+3
ADDI 1,3 ; N
MOVE 2,PTR-1(11) ; PWDS(M)=PWDS(M-1)+N
ADDI 2,(1)
MOVEM 2,PTR(11)
AOJ 11, ; M=M+1
;; FIXX(1) ;DO 22 K=J,J+N-1
ADDI 1,(12) ; -J+N-
;; SOJ 1,
S22: MOVE 2,Q-1(4) ; RN(K)=PN(JL)
MOVEM 2,XRN(12)
AOJ 12,
CAME 12,1
AOJA 4,S22 ;22 JL=JL+1
AOJ 4, ; (JL=JL+1)
;; AOJ 12, ; (J=J+N)
MOVE 2,[100000.0] ; PN(LA+3)=100000
MOVEM 2,Q+2(15) ; PUT IT ASIDE
;? AOJ 12, ; (J=N+J)
JRST S24 ; GO TO 24
SHIFT: 0 ; CALL SHIFT
SOS LLL ; (IN MAIN. L=L-1)
SETZ 2, ;K=1
SETZ 3, ;L=1
SETO 4, ;LK=1 ((LL=0))
SH221: MOVE 5,PX(2) ;221 IF(Q(IFIX(PN(K))+1))GO TO 321
MOVE 6,Q(5)
JUMPL 6,SH321
MOVE 7,PX+1(2)
SH421: MOVE 6,Q-1(5) ;DO 421 KL=IFIX(PN(K)),IFIX(PN(K+1))-1
MOVEM 6,Q(3) ; ((LL=LL+1))421 Q(LL)=Q(KL)
AOJ 5,
CAMGE 5,7
AOJA 3,SH421
AOJ 4, ;LK=LK+1
AOJ 3,
MOVE 1,3 ;PN(LK)=LL+1
AOJ 1,
MOVEM 1,PX+1(4)
SH321: AOJ 2, ;321 K=K+1
CAMGE 2,LLL ; (L) IF(K.LT.KK)GO TO 221
JRST SH221
AOJ 4,
MOVEM 4,LLL ; L=LK-1
;; L=NUMBER OF ITEMS FOR RHY RECONS.
JRA 16,(16)
SHFT1: 0 ; CALL SHFT1(KQ)
MOVEI 2,1 ; -L- (KK=1)
;; MOVEI 3,1 ; K
MOVEI 6,1 ; -K-
SP: KIFIX 4,Q-1(6) ;220 JJ=Q(K)+3
ADDI 4,3
MOVEM 6,PX-1(2)
;;NEW POINTER
MOVE Q(6) ;IF(Q(K+1).NE.2.OR.Q(K).LT.6)GO TO SPA
CAME [2.0]
JRST SPA
MOVE [6.0]
CAMLE Q-1(6)
JRST SPA
MOVEI 13,(4) ; JJ
ADDI 13,(6) ; +K
;; SOJ 13, ; -1
MOVE 3,Q(13) ;IF(Q(JJ+1).NE.10.OR.Q(JJ).LT.6)GO TO SPA
CAME 3,[10.0]
JRST SPA
CAMLE Q-1(13)
JRST SPA
SETO 3, ;M=0 (-1)
KIFIX 5,Q-1(13) ; KK=Q(JJ)+2
;DO SPB N=K,KK
ADDI 5,2 ; KK
MOVEI 7,(6) ; (N=K)
ADDI 5,(7) ; (KK=K+KK+JJ-1)
ADDI 5,(4)
;; SOJ 5, ; THE TOTAL NUM OF ITEMS TO SCRAMBLE
SPB: MOVE Q-1(7) ;M=M+1
AOJ 3, ; M
MOVEM XRN(3) ;SPB RN(M)=Q(N)
CAIGE 7,(5)
AOJA 7,SPB
MOVEI 3,(13) ; JJ
SUB 3,6 ; M=JJ-K (-1)
MOVEI 7,(5) ; KK
SUB 7,13 ; J=KK-JJ
MOVEI 11,(7) ; KA=J
ADDI 11,(6) ; +K
;; SOJ 11, ;KA=K+J-1
MOVEI 12,(6) ; N=K
MOVEI 14,(12)
MOVE 15,XRN+3(3) ; SAVE POS (R3)
SPC: MOVE XRN(3) ;DO SPB N=K,KA
MOVEM Q-1(12) ; M=M+1
AOJ 3, ;SPC Q(N)=RN(M)
CAIGE 12,(11)
AOJA 12,SPC
MOVEI 13,(6) ; JJ=K+J
ADDI 13,(7) ; JJ
SETZ 3, ; M=0
SOJ 5, ; KK-1
MOVE 7,XRN+3(3) ; POS OF THIS ITEM
MOVEM 7,Q+2(14) ;EXCHANGE THEM
MOVEM 15,XRN+3(3)
SPD: MOVE XRN(3) ;DO SPD N=JJ,KK-1
MOVEM Q(13) ; M=M+1
AOJ 3, ;SPD Q(N)=RN(M)
CAIGE 13,(5)
AOJA 13,SPD ; ALL THIS TO FIND NUM AFTER WHOLE REST.
JRST SP ;GO BACK TO GET RIGHT PNTRS NOW.
;K=K+JJ
SPA: ADDI 6,(4) ; -K- (KK=KK+1)
CAMGE 6,@(16) ;IF(K.LT.KQ)GO TO 220
AOJA 2,SP
AOJ 2, ;PN(KK)=K
MOVEM 6,PX-1(2)
MOVEM 2,LLL ;L=KK
JRA 16,1(16)
SHFT0: 0 ; CALL SHFT0(KQ)
MOVE 2,LLL ; L
MOVE 4,PTR-1(2)
SOJ 4,
MOVE 2,@(16) ; KQ
;; SETZ 3, ; K
;;SH32: MOVE XRN(3) ; DO 32 K=1,IFIX(PWDS(L))-1
;; MOVEM Q(2) ; KQ=KQ+1
;; AOJ 3,
;; CAME 3,4
;; AOJA 2,SH32
;; AOJ 2, ; 32 Q(KQ)=RN(K)
HRLZI 3,XRN ; PUT ADDR OF RN IN LEFT HALF
HRRI 3,Q(2) ; ADDR OF NEXT OPEN SLOT OF Q IN RIGHT HALF
ADDI 2,(4) ; TO LOCATE END OF TRANSFER
BLT 3,Q(2) ; THESE REPLACE THE ';;' ABOVE
MOVEM 2,@(16) ; NEW VALUE OF KQ
MOVEI 1
MOVEM LLL ; L
MOVEM XXX ; LK
JRA 16,1(16)
PSHFT: 0 ; CALL PSHFT(I)
MOVE 6,@(16)
MOVEI 2,1
MOVE 2,PX-1(2) ; DO 31 NA=1,I
MOVE 3,PX(6) ; RN(KL)=Q(NA)
; 31 KL=KL+1
MOVE 4,SF ; KL
PS31: MOVE 5,Q-1(2)
MOVEM 5,XRN-1(4)
AOJ 2,
CAIE 2,(3)
AOJA 4,PS31
AOJ 4,
MOVEM 4,SF ; PUT BACK NEW VALUE OF KL
JRA 16,1(16)
; SUBROUTINE ADDRST(RPOS,XWDS,PN)
; COMMON /XXX/LK,LP,JY /PTR/PWDS(250),L,LL,I,IX
; COMMON RS,JA,REST,J2,RQ(18),JX,JR,LX,RDIS
; DIMENSION XWDS(1),PN(1)
ADRST: 0 ; PN(LK)=6
MOVE 1,XXX ; LK
MOVE 6,[6.0] ; CALL ADRST(XWDS)
MOVEM 6,Q-1(1)
MOVE 2,[2.0] ; PN(LK+1)=2
MOVEM 2,Q(1)
;; MOVE 13,.COMM. ; PN(LK+2)=RS
SETZM Q+1(1)
MOVE 3,SHFT1 ; PN(LK+3)=RPOS-1. (SHFT1 SAVED 'RR')
MOVEM 3,Q+=11(1) ; SEE (LK+3) BELOW
FSBR 3,[1.0]
MOVEM 3,Q+2(1)
SETZM Q+3(1) ; PN(LK+4)=0
SETZM Q+4(1) ; PN(LK+5)=0
SETZM Q+5(1) ; PN(LK+6)=0
MOVEM 6,Q+6(1) ; PN(LK+7)=6.
MOVE 10,[1.0]; PN(LK+8)=-1
MOVNM 10,Q+7(1)
; LK=LK+9
; L=L+1
; XWDS(L)=LK
; NEXT ADDS A BAR LINE
MOVEM 2,Q+=8(1) ; PN(LK)=2
MOVE [4.0] ; PN(LK+1)=4
MOVEM Q+=9(1)
;; MOVEM 13,PX+=10(1) ; PN(LK+2)=RS
SETZM Q+=10(1)
; PN(LK+3)=RPOS (SEE ABOVE)
MOVEM 10,Q+=12(1) ; PN(LK+4)=1.
; LK=LK+5
; L=L+1
; XWDS(L)=LK
; END
MOVE 2,LLL ; L
HRRZ 3,(16) ; ADDR OF XWDS
ADDI 3,(2)
ADDI 1,=9
MOVE 4,1
;; TLC 4,232000 ; NEXT FLOATS IT
;; FADR 4,4
MOVEM 4,(3) ;XWDS(L)=LK
;; AOJ 3,
ADDI 4,5
MOVEM 4,1(3) ;XWDS(L+1)=LK
ADDI 2,2
MOVEM 2,LLL ;L=L+2
ADDI 1,5
MOVEM 1,XXX ;LK=LK+14
JRA 16,1(16)
ENDL: 0
MOVE 5,[4.0]
SETZ 2, ; JJ
MOVEI 3,1 ; K
E7: MOVE 4,PX-1(3)
CAME 5,Q(4)
JRST E77
AOJ 2,
MOVE Q+2(4)
MOVEM XRN-1(2)
E77: CAMGE 3,LLL
AOJA 3,E7
MOVEM 2,@(16)
JRA 16,1(16)
STAFF: 0 ; SUBROUTINE STAFF(P0,P1, P3,P4,P5,P6,P7,P8)
;; COMMON/XRN/RN(2000) /SF/KL,RT,KP,RSTJ2,NAMX
;; COMMON /PTR/PWDS(250),L,LL,I,IX
MOVE 2,SF+2 ; KP PWDS(KP)=KL
MOVE 4,SF ; KL
MOVEI 3,(4)
;; TLC 3,232000 ; FLOAT
;; FADR 3,3
MOVEM 3,PTR-1(2)
AOJ 2, ; KP=KP+1
MOVEM 2,SF+2
MOVE 2,@(16) ; RN(KL)=P0
MOVEM 2,XRN-1(4)
MOVE @1(16) ; RN(KL+1)=P1
MOVEM XRN(4)
MOVE SF+1 ; RN(KL+2)=RT
MOVEM XRN+1(4)
MOVE @2(16) ; RN(KL+3)=P3
MOVEM XRN+2(4)
MOVE @3(16) ; RN(KL+4)=P4
MOVEM XRN+3(4)
MOVE @4(16) ; RN(KL+5)=P5
MOVEM XRN+4(4)
CAMGE 2,[4.0] ; IF(P0.LT.4.)GO TO 1
JRST ST1
MOVE @5(16) ; RN(KL+6)=P6
MOVEM XRN+5(4)
MOVE @6(16) ; RN(KL+7)=P7
MOVEM XRN+6(4)
MOVE @7(16) ; RN(KL+8)=P8
MOVEM XRN+7(4)
MOVE @=8(16) ; RN(KL+9)=P9
MOVEM XRN+=8(4)
MOVE @=9(16) ; RN(KL+10)=P10
MOVEM XRN+=9(4)
MOVE @=10(16) ; RN(KL+11)=P11
MOVEM XRN+=10(4)
MOVE @=11(16) ; RN(KL+12)=P12
MOVEM XRN+=11(4)
ST1: KIFIX 2,2 ;1 KL=KL+P0+3.
ADDI 2,3
ADDM 2,SF
JRA 16,=12(16) ; END
RIGHT: 0 ; FUNCTION RIGHT(NA,J)
;; COMMON /PX/PN(1800) /Q/Q(9000)
MOVE 4,@(16) ; NA K=NA+J
ADD 4,@1(16) ; +J J IS EITHER +1 OR -1
MOVE 5,[16.0]
RT1: MOVE 3,PX-1(4) ; 1 L=PN(K)
;; MOVE Q(3) ; IF(Q(L+1).NE.16)GO TO 2
;; CAME [16.0] ; **** CAN'T USE AC2 - USED IN FORTRAN
CAME 5,Q(3)
JRST RT2
ADD 4,@1(16) ; K=K+J
JRST RT1 ; GO TO 1
RT2: MOVE Q+2(3) ; 2 RIGHT=Q(L+3)
JRA 16,2(16) ; END
LOOP1: 0 ;CALL LOOP1
;;; MOVE 1,[8.0] ; RSTAFF=RSTAFF+8
;;; FADRB 1,RCLF+4
MOVE 1,RCLF+4 ;RSTAFF IS UPDATED EARLIER.
MOVE 2,RCLF+2
P477: MOVE 4,RCLF ; DO 477 K=KW,ITEM+1
ADDB 4,PTR-1(2) ; PWDS(K)=PWDS(K)+R
;; FIXX(4) ; LA=PWDS(K)+2
FADRM 1,XRN+1(4) ;477 RN(LA)=RN(LA)+RSTAFF
CAMG 2,RCLF+3
AOJA 2,P477
JRA 16,(16) ; FOR COMBINED FILES
RESTS: 0 ;XLFT=0 -- CALL RESTS
SETZ 2,
MOVE 12,[4.0]
MOVE 13,[16.0] ; TO CATCH WORDS
MOVN 3,[99.0] ;SIG=-99
;; MOVE 4,3 ;CLEF=-99
SETZ 6, ; REST=0
MOVEI 7,1 ;K=1
RX50: MOVE 10,PX-1(7) ;50 JL=PN(K)
MOVE 11,Q(10) ;R=Q(JL+1)
JUMPN 2,RX5 ;IF(XLFT.NE.0)GO TO 5
CAMLE 11,[4.0] ;IF(R.LE.4)XLFT=Q(JL+3)
JRST RX5
MOVE 2,Q+2(10)
MOVEM 2,.COMM.+=13
JRST RX3
RX5: CAME 11,[17.0] ;5 IF(R.NE.17)GO TO 3
JRST RX3
MOVE 1,Q+4(10) ;IF(Q(JL+5).EQ.SIG)GO TO 60
CAMN 1,3
JRST RX60
MOVE 3,1 ;SIG=Q(JL+5)
RX3: CAME 11,[2.0] ;3 IF(R.NE.2)GO TO 231
JRST RX231
MOVE Q-1(10) ;IF(Q(JL).GE.6)GO TO 7
CAML [6.0]
JRST RX7
JRST RX231 ;NEXT (TO RX7) DOESN'T WORK YET. NEEDS TO EXPND DATA!
MOVE 1,PX-2(7) ;IF(Q(KPN(K-1))+1).NE.4)GO TO 231
CAMN 12,Q(1)
JRST RX55 ; ANY REST BETWEEN 2 BARS IS A "WHOLE" REST.
CAME 13,Q(1)
JRST RX231 ; IF NOT WORDS, JUMP
MOVE 14,PX-3(7)
CAME 12,Q(14) ; IS THIS ONE A BAR?
JRST RX231 ; NO
; WON'T CATCH IT IF THERE IS A CLEF, METER, ETC. PRESENT
RX55: MOVE 1,PX(7) ;IF(Q(KPN(K+1))+1).NE.4)GO TO 231
CAME 12,Q(1)
JRST RX231
; FOUND A WHOLE REST MEAS.
RX7: JUMPN 6,RX6 ;7 IF(REST.NE.0)GO TO 6
MOVEI 13,(10) ;JR=JL+8
ADDI 13,6
; POINTER TO REST NUM.
MOVE 11,Q(13) ;R=Q(JR-1)
CAMGE 11,[5.0] ;IF(R.LT.5)R=5
MOVE 11,[5.0]
FMPR 11,[0.6] ;Q(JR-1)=R*.6
MOVEM 11,Q(13)
; REDUCE SIZE OF REST'S TIME SO IT WILL TAKE LESS SPACE.
RX6: FADR 6,[1.0] ;6 REST=REST+1
MOVEM 6,Q+1(13) ;Q(JR)=REST
MOVN [2.0]
MOVEM Q-3(13) ;Q(JR-4)=-2 (LOWER THE REST'S POS.)
MOVEI 10,(7) ;JL=K+2
ADDI 10,2
CAML 10,LLL ;IF(JL.GE.L)RETURN
JRA 16,(16)
MOVE 14,PX-1(10) ;LB=KPN(JL)
MOVE Q(14) ;IF(Q(LB+1).NE.2)GO TO 233
CAME [2.0]
JRST RX233 ; NEXT IS TO COMBINE MEASURES OF REST
MOVE Q-1(14) ;IF(Q(LB).LT.6)GO TO 233
CAMGE [6.0]
JRST RX233
; SKIP NON-WHOLE RESTS
MOVE 15,PX-2(10) ;N=KPN(JL-1)
;; MOVE Q(15) ;IF(Q(N+1).NE.4)GO TO 233
;; CAME [4.0]
CAME 12,Q(15)
JRST RX233
; IS REST FOLLOWED BY A BAR? OR RHRSL NUM?(COULD BE A PROB. HERE!!!)
; SO IT WON'T BE FOUND NEXT TIME AROUND.
MOVN [1.0] ;Q(LB+1)=-1
MOVEM Q(14)
; CHANGE CODE #
MOVEM Q(15) ;Q(N+1)=-1
MOVEI 7,(10) ;K=JL
JRST RX6 ;GO TO 6
RX60: MOVE [1.0] ;60 Q(JL+1)=-1
MOVNM Q(10)
JRST RX231 ;GO TO 231
RX233: SETZ 6, ;233 REST=0
RX231: AOJ 7, ;231 K=K+1
CAMGE 7,LLL ;IF(K.LT.L)GO TO 50
JRST RX50
JRA 16,(16) ; END
EXCHG: 0 ;CALL EXCHG(MM(J),NN(J))
HRRZI 1,@(16) ; ADDR OF MM(J)
MOVE 2,1(1) ;VALUE OF MM(J+1)
EXCH 2,@(16) ;EXCHANGE
MOVEM 2,1(1) ; MM(J+1)
HRRZI 1,@1(16) ; ADDR OF NN(J)
MOVE 2,1(1) ;VALUE OF NN(J+1)
EXCH 2,@1(16) ;EXCHANGE
MOVEM 2,1(1) ; NN(J+1)
JRA 16,2(16)
EXCH: 0
MOVE @(16)
EXCH @1(16)
MOVEM @(16)
JRA 16,2(16)
SHRNK: 0 ;CALL SHRNK(K,IT)
MOVE 10,@1(16)
MOVE 11,PX(10) ;END OF Q DATA
SOJ 10,
MOVE 2,@(16) ;K
MOVEI 12,(2)
MOVE 3,PX-1(2) ;PTR TO Q(n)
MOVEI 6,(3) ;SAME
MOVE 4,PX(2) ;PTR TO NEXT ITEM
MOVEI 1,(4) ;TO USE IN BLT
SUBI 3,(4) ;WDCCNT OF DELETE ITEM
;; MOVE 7,3 ; SAVE THIS DIFF.
SUB 4,PX+1(2) ; NEXT +1
SUB 3,4 ; AMOUNT OF CHANGE
;;SK: ADDM 3,PX(2) ;KPN(n)=KPN(n)+L
;; CAME 2,@1(16)
;; AOJA 2,SK ; THE LOOP
SK: MOVE 5,PX+1(2)
SUB 5,PX(2)
ADD 5,PX-1(2)
MOVEM 5,PX(2)
;; CAME 2,@1(16)
CAIE 2,(10)
AOJA 2,SK
;; SOS @1(16) ;IT=IT-1
;; SOJ 2,
;; ADDM 7,PX(2)
;; MOVEM 2,@1(16)
MOVE 2,PX(2) ; LAST PTR
MOVE 7,Q+2(6) ;POS FOR LATER "MOVE"
;;SK2: HRLZI 1,Q-1(1) ;PICK IT UP
;; HRRI 1,Q-1(6) ;PUT IT HERE
;; MOVNS 3 ;--WDCNT
;; ADDI 3,(2) ;PTR TO OLD END OF LIST
;; BLT 1,Q-1(3) ;UNTIL END OF DATA
SK2: MOVE Q-1(1)
MOVEM Q-1(6)
AOJ 1,
CAIE 1,(11)
AOJA 6,SK2
MOVEM 10,@1(16)
AOJ 10, ; TO GET TO END OF DATA.
MOVEM 10,LLL
MOVEM 7,.COMM.+5 ;R4
MOVN 5,[8.0]
SKMV: SETZM LLL+1 ;LL=0 (NO JUSTIFY)
MOVE 2,[20000.0]
MOVEM 2,.COMM.+6 ;R5
SETZM .COMM. ;RS
SETZM .COMM.+=10 ;R9
SETZM .COMM.+=8 ;R7
FMPR 5,STF+=8 ;*RSTJ2
MOVEM 5,.COMM.+=9 ;R8=MOVE DIST.(-8)
;; MOVE 2,@1(16)
;; MOVEM 2,LLL ;END OF DATA
;; MOVEI 11,PX-1(6) ;START OF DATA
JSA 16,PTMOVE
JUMP Q
JUMP PX-1(12)
JRA 16,2(16)
EXPND: 0 ; TO SHIFT LINE TO RT. WHEN ADDING KSIG.
MOVE 5,[5.0]
MOVE 2,[7.1]
FMPR 2,STF+=8
MOVEM 2,.COMM.+5 ;R4=7*RSTJ2+.1
MOVE 12,@(16) ; GET PTR TO PX
ADDI 12,2 ; ADD 2 (FOR NOW, ANYWAY)
SETZM .COMM.+=9
JRST SKMV ; GO MOVE IT
CLFNUM: 0 ;X=CLFNUM(Q,PX,MS) (FUNCTION)
MOVEI 2,@1(16) ;GET PX'S ADDR
ADD 2,@2(16)
MOVE 2,(2) ;PX(MS)
MOVEI 1,@(16) ; ADDR OF Q
ADD 2,1 ;ADDR OF Q(PX(MS)+1)
MOVE 5(2) ;X=Q(PX(MS)+5)
MOVE 1,-1(2)
CAMGE 1,[3.0] ;IF (Q( ).LT.3)X=0
SETZ ; ANSWER IN AC0
JRA 16,3(16)
SLRV: 0 ; CALL SLRV(KK,C)
MOVE 1,@(16) ; KK
MOVE 2,@1(16) ; C
FADRM 2,Q+3(1) ; WORKS WITH Q ARRAY ONLY******
FADRM 2,Q+4(1) ; FOR Q(KK+4) AND (KK+5)
MOVNS Q+6(1) ; Q(KK+7)
JRA 16,3(16)
CLEFN: 0
MOVEI 3,@(16) ;FUNCTION CLEFN(Q,J)
ADD 3,@1(16) ;Q(J+1) NOW
MOVE 2,-1(3) ;IF(Q(J).LT.3)RR=0
CAML 2,[3.0]
JRST CLX
SETZ 0,
JRA 16,2(16)
CLX: MOVE 0,4(3)
CAMGE 0,[100.0]
JRA 16,2(16) ;IF(Q(J+5).LT.100)RR=Q(J+5)
JSA 16,AMOD
JUMP 4(3) ;ELSE RR=AMOD(Q(J+5),100.0)
JUMP [100.0]
JRA 16,2(16)
MMNN: 0 ;CALL MMNN(K)
MOVEI 2,1 ;N=N+1
ADDB 2,JN+1 ;NN(N)=0
SETZM XRN+=1499(2)
MOVE @(16) ;MM(N)=J+K
ADD JN
MOVEM XRN-1(2)
JRA 16,1(16)
CODEN: 0 ;FUNCTION CODEN(K,N,R,M)
MOVE 1,@1(16) ;PNTR TO K ARRAY
SOJ 1,
ADD 1,(16) ;ADD LOC OF K ARRAY
MOVE 1,(1) ;GET PNTR TO R ARRAY
MOVEM 1,@3(16) ;SEND IT BACK IN M
ADD 1,2(16) ;ADD LOC OF R ARRAY
MOVE (1) ;R(M+1) (CODE NUM OF ITEM)
JRA 16,4(16)
END